草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 在容器中存储迭代器

我正在构建另一个应用程序将使用的DLL。我想在从函数调用返回之前将某些数据的当前状态全局存储在DLL的内存中,以便我可以在下一次调用该函数时重用状态。为此,我必须保存一些迭代器。我正在使用std::stack来存储所有其他数据,但我不确定我是否也可以使用迭代器来做到这一点。将列表迭代器放在容器类中安全吗?如果没有,您能否建议一种方法来存储指向列表中元素的指针,以便我以后可以使用它?我知道使用vector而不是列表来存储我的数据可以让我存储下标并非常容易地重用它,但不幸的是我只能使用std::list。 最佳答案 仅当列表被销毁或“指

c++ - 有条件地向前或向后迭代的优雅方式

我必须根据bool标志正向或反向处理std::vector。实现此目的最优雅的方法是什么?在需要反过来做之前,我有:BOOST_FOREACH(constCType&foo,vec){...}但是,现在我长得很丑:for(inti=undoing?(vec.size()-1):0;undoing?(i>=0):(i有没有更好的办法? 最佳答案 我不知道人们会称之为优雅,但有:autodo_it=[](constCType&elem){...};if(iterate_forward){std::for_each(vec.begin()

C++ 使用 std::vector 迭代类指针

我正在尝试使用指针迭代vector我有一个vector叫做:std::vectorobjects;还有很多像这样的函数:voidGame::update(){std::vector::iteratoritr;for(itr=objects.begin();itrupdate();//IneedtocallaabstractfunctionintheGameObjectClass}}Game::~Game(){deleteball;deleteplayer;}Game::Game(){ball=newGOBall(800/2-GOBall::SIZE/2,600/2-GOBall::SI

c++ - 根据 C++17 标准,为什么反向迭代器不是正式的迭代器类别?

反向迭代器不在迭代器类别标签列表中,因此假定它不是一个类别。那么它到底是什么? 最佳答案 迭代器类别编码功能级别。输入迭代器是最低限度的-可递增和解引用一次前向迭代器是一种输入迭代器,您可以多次取消引用并支持多遍。双向迭代器是可以递减的正向迭代器随机访问迭代器是一个双向迭代器,您可以将O(1)推进+/-n连续迭代器是指连续内存的随机访问迭代器这些级别的功能由算法使用-一些算法需要特定级别的功能,一些算法可以简单地基于特定级别的功能进行优化(例如advance(it,n)对于随机访问迭代器可以只执行it+=n而对于前向迭代器它必须是+

c++ - 在 C++ 中,如何迭代地访问几个名称仅因数字不同而不同的变量?

我需要一种方法来帮助我在循环中逐个访问名为“comboBox1”、“comboBox2”等的变量。我想更改代码,例如://proceedcomboBox1//proceedcomboBox2//proceedcomboBox3//proceedcomboBox4//proceedcomboBox5//proceedcomboBox6进入:for(inti=1;i我试图找到类似“eval”的东西,但谷歌没有给出任何匹配的东西。我还尝试使用运算符##预处理名称,但似乎无法将当前整数值放入宏中。 最佳答案 最简单的解决方案是将它们全部放在

c++ - 迭代器两个**的含义

在下面的代码段中vectorsceneObjs;vector::iteratoriter;iter=sceneObjs.begin();while(iter!=sceneObjs.end()){cout为什么**iter有两个*? 最佳答案 第一个*取消引用迭代器,给出一个SceneObject*指针。第二个*取消引用此SceneObject*指向SceneObject本身的指针。 关于c++-迭代器两个**的含义,我们在StackOverflow上找到一个类似的问题:

c++ - 列表迭代器超出范围

我对STLlistclass有疑问.我有一个名为Contact的基类和三个派生类Friend、Colleague和Acquaintance。派生类的每个实例都有我在fill*Class*Details()函数中修改的某些字段。问题是当它到达push_back行时,我的程序给我一个错误提示listinsertiteratoroutsiderange.那是什么?voidAgenda::pushContact(stringline,stringtemp)//functionthataddsacontactoftypetemp,containingthefieldsfromlinetothel

c++ - 什么时候使用协程而不是迭代器?

假设我有想要“一次一个”提供的数据。有很多数据,这就是为什么我只在需要时才得到一份(以节省内存)。所以我不能将整个数据存储在std::vector中。今天我可以为此使用迭代器,因为它们自然地满足了这个要求。但我也可以使用协同程序(目前使用的是CoroutinesTS)。不需要使用仅使用迭代器的算法。在这种情况下使用协程比使用迭代器有什么优势吗? 最佳答案 迭代器充当一种胶水,允许用户编写对值序列进行运算的算法,而无需知道该序列是如何到达那里或如何保存的。但是算法和序列之间的特定“胶水”是无关紧要的。唯一重要的是算法的特定实现必须根据

c++ - vector 迭代编译成非常不同的指令

令我惊讶的是,使用最新的编译器对vector进行迭代会针对相同的结果显示截然不同的代码。这是代码:voidfun1(vector&a,unsignednum){for(auto&&value:a){value+=num;}}voidfun2(vector&a,unsignednum){for(uint32_tx=0,p=a.size();x&a,unsignednum){for(uint32_tx=0;x&a,unsignednum){for(autoit=a.begin();it!=a.end();++it){*it+=num;}}voidfun5(vector&a,unsigned

c++ - 只计算递增次数的输出迭代器?

在STL/Boost中,有没有现成的只计算自增次数的输出迭代器?当算法执行*iter=value时,该值将被简单地丢弃。如果没有,那么滚动我自己的似乎很容易。尽管如果有人发布了此类迭代器的示例,它可能对其他人有用。 最佳答案 标准C++中不存在这样的迭代器,据我所知,没有任何Boost迭代器具有这种确切的功能。不过,有很多方法可以使用这些库来执行此操作,而无需自己动手。例如,使用Boost的function_output_iterator,您可以像这样构建一个计数器:structCounter{size_t*out;explicit